home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / lib / emacs / 19.22 / lisp / makesum.el < prev    next >
Lisp/Scheme  |  1993-03-21  |  4KB  |  114 lines

  1. ;;; makesum.el --- generate key binding summary for Emacs
  2.  
  3. ;; Copyright (C) 1985 Free Software Foundation, Inc.
  4.  
  5. ;; Maintainer: FSF
  6. ;; Keywords: help
  7.  
  8. ;; This file is part of GNU Emacs.
  9.  
  10. ;; GNU Emacs is free software; you can redistribute it and/or modify
  11. ;; it under the terms of the GNU General Public License as published by
  12. ;; the Free Software Foundation; either version 2, or (at your option)
  13. ;; any later version.
  14.  
  15. ;; GNU Emacs is distributed in the hope that it will be useful,
  16. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18. ;; GNU General Public License for more details.
  19.  
  20. ;; You should have received a copy of the GNU General Public License
  21. ;; along with GNU Emacs; see the file COPYING.  If not, write to
  22. ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  23.  
  24. ;;; Commentary:
  25.  
  26. ;; Displays a nice human-readable summary of all keybindings in a
  27. ;; two-column format.
  28.  
  29. ;;; Code:
  30.  
  31. ;;;###autoload
  32. (defun make-command-summary ()
  33.   "Make a summary of current key bindings in the buffer *Summary*.
  34. Previous contents of that buffer are killed first."
  35.   (interactive)
  36.   (message "Making command summary...")
  37.   ;; This puts a description of bindings in a buffer called *Help*.
  38.   (save-window-excursion
  39.    (describe-bindings))
  40.   (with-output-to-temp-buffer "*Summary*"
  41.     (save-excursion
  42.      (let ((cur-mode mode-name))
  43.        (set-buffer standard-output)
  44.        (erase-buffer)
  45.        (insert-buffer-substring "*Help*")
  46.        (goto-char (point-min))
  47.        (delete-region (point) (progn (forward-line 1) (point)))
  48.        (while (search-forward "         " nil t)
  49.      (replace-match "  "))
  50.        (goto-char (point-min))
  51.        (while (search-forward "-@ " nil t)
  52.      (replace-match "-SP"))
  53.        (goto-char (point-min))
  54.        (while (search-forward "  .. ~ " nil t)
  55.      (replace-match "SP .. ~"))
  56.        (goto-char (point-min))
  57.        (while (search-forward "C-?" nil t)
  58.      (replace-match "DEL"))
  59.        (goto-char (point-min))
  60.        (while (search-forward "C-i" nil t)
  61.      (replace-match "TAB"))
  62.        (goto-char (point-min))
  63.        (if (re-search-forward "^Local Bindings:" nil t)
  64.        (progn
  65.         (forward-char -1)
  66.         (insert " for " cur-mode " Mode")
  67.         (while (search-forward "??\n" nil t)
  68.           (delete-region (point)
  69.                  (progn
  70.                   (forward-line -1)
  71.                   (point))))))
  72.        (goto-char (point-min))
  73.        (insert "Emacs command summary, " (substring (current-time-string) 0 10)
  74.            ".\n")
  75.        ;; Delete "key    binding" and underlining of dashes.
  76.        (delete-region (point) (progn (forward-line 2) (point)))
  77.        (forward-line 1)            ;Skip blank line
  78.        (while (not (eobp))
  79.      (let ((beg (point)))
  80.        (or (re-search-forward "^$" nil t)
  81.            (goto-char (point-max)))
  82.        (double-column beg (point))
  83.        (forward-line 1)))
  84.        (goto-char (point-min)))))
  85.   (message "Making command summary...done"))
  86.  
  87. (defun double-column (start end)
  88.   (interactive "r")
  89.   (let (half cnt
  90.         line lines nlines
  91.     (from-end (- (point-max) end)))
  92.     (setq nlines (count-lines start end))
  93.     (if (<= nlines 1)
  94.     nil
  95.       (setq half (/ (1+ nlines) 2))
  96.       (goto-char start)
  97.       (save-excursion
  98.        (forward-line half)
  99.        (while (< half nlines)
  100.      (setq half (1+ half))
  101.      (setq line (buffer-substring (point) (save-excursion (end-of-line) (point))))
  102.      (setq lines (cons line lines))
  103.      (delete-region (point) (progn (forward-line 1) (point)))))
  104.       (setq lines (nreverse lines))
  105.       (while lines
  106.     (end-of-line)
  107.     (indent-to 41)
  108.     (insert (car lines))
  109.     (forward-line 1)
  110.     (setq lines (cdr lines))))
  111.     (goto-char (- (point-max) from-end))))
  112.  
  113. ;;; makesum.el ends here
  114.